#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QListWidget>
#include <QDebug>
#include <QComboBox>
#include "putton.h"

// 用户信息
struct User : QObjectUserData {
    int nID;  // ID
    QString strName;  // 用户名
};

// 语言
typedef enum{
    UI_ZH,  // 中文
    UI_EN  // 英文
} LANGUAGE;

Q_DECLARE_METATYPE(User)
Q_DECLARE_METATYPE(LANGUAGE)

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
//    QListWidget *pListWidget = ui->listWidget;
//    int i = 0;
//    do {
//        ++i;
//        QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
//        pItem->setData(Qt::UserRole, i);  // 用户数据
//        pItem->setData(Qt::UserRole + 1, QString("Qter %1").arg(i));  // 用户数据
//        pItem->setText(QString("Item %1").arg(i));  // 文本
//        pListWidget->addItem(pItem);
//    } while (i < 5);

//    // 连接信号槽
//    QListWidget *pListWidget = ui->listWidget;
//    int i = 0;
//    do {
//        ++i;
//        QListWidgetItem *pItem = new QListWidgetItem(pListWidget);
//        User user;
//        user.nID = i;
//        user.strName = QString("Qter %1").arg(i);
//        pItem->setData(Qt::UserRole, QVariant::fromValue(user));  // 设置用户数据
//        pItem->setText(QString("Item %1").arg(i));
//        pListWidget->addItem(pItem);
//    } while (i < 5);
//    connect(pListWidget, &QListWidget::itemClicked, this, &MainWindow::onItemClicked);

//    QComboBox *pComboBox = ui->comboBox;
//    pComboBox->addItem("Chinese");
//    pComboBox->addItem("English");
//    pComboBox->setItemData(0, QVariant::fromValue(UI_ZH));  // 设置用户数据
//    pComboBox->setItemData(1, QVariant::fromValue(UI_EN));  // 设置用户数据
//    // 连接信号槽
//    connect(pComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, &MainWindow::onCurrentIndexChanged);

    PushButton *pButton = new PushButton(this);
    pButton->setText("Qter");
    pButton->setGeometry(62,40,75,30);
    // 设置自定义数据
    pButton->setID(1);
    pButton->setName("Qter");

//    // 用户数据
//    User *pUser = new User();
//    pUser->nID = 1;
//    pUser->strName = "Qter";
//    pButton->setUserData(Qt::UserRole, pUser);  // 设置用户数据
    // 连接信号槽
    connect(pButton, &QPushButton::clicked, this, &MainWindow::onClicked);
}

void MainWindow::onCurrentIndexChanged(int index) {
    // 获取发送者
    QObject *pObject = this->sender();
    QComboBox *pComboBox = qobject_cast<QComboBox *>(pObject);

    // 获取用户数据
    QVariant variant = pComboBox->itemData(index);
    LANGUAGE language = variant.value<LANGUAGE>();

    qDebug() << "Language : " << language;
}

void MainWindow::onItemClicked(QListWidgetItem *item) {
//    int nID = item->data(Qt::UserRole).toInt();  // 获取用户数据
//    QString strName = item->data(Qt::UserRole + 1).toString();  // 获取用户数据
//    qDebug() << "ID : " << nID;
//    qDebug() << "Name : " << strName;

    QVariant variant = item->data(Qt::UserRole);  // 获取用户数据
    User user = variant.value<User>();
    qDebug() << "ID : " << user.nID;
    qDebug() << "Name : " << user.strName;
}

void MainWindow::onClicked()
{
//    // 获取发送者
//    QObject *pObject = this->sender();
//    QPushButton *pButton = qobject_cast<QPushButton *>(pObject);
//    // 获取用户数据
//    User *pUser = (User *)(pButton->userData(Qt::UserRole));
    // 获取发送者
    QObject *pObject = this->sender();
    PushButton *pButton = qobject_cast<PushButton *>(pObject);
    // 获取用户数据
    qDebug() << "ID : " << pButton->id();
    qDebug() << "Name : " << pButton->name();
//    qDebug() << "ID : " << pUser->nID;
//    qDebug() << "Name : " << pUser->strName;
}

MainWindow::~MainWindow()
{
    delete ui;
}


